#include <iostream>
#include "Program.h"
#include "Util/Timer.h"
#include "Util/Util.h"
#include <direct.h>
#include "Script/SingleYH.h"
#include "Script/TeamLeader.h"

//#include   <fstream> 


/*用于监听控制台退出事件,在退出程序前输出记录数据到文件*/
BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
{
	if (CTRL_CLOSE_EVENT == dwCtrlType)
	{
// 		ofstream   ofresult("log_Camera0.txt ", ios::out);
// 		ofresult << "收到触发信号 " << endl;

		SetThreadExecutionState(ES_CONTINUOUS);// 退出系统休眠
	}
	return true;
}

int main(int argc, char** argv)
{
	// 请求管理员权限
	if (!IsProcessRunAsAdmin())
	{
		GainAdminPrivileges(argv[0]);
		return(1);
	}

	SetConsoleCtrlHandler(HandlerRoutine, TRUE);//注册监听程序退出事件

	//以下代码用于解决WIN10控制台阻塞
	HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
	DWORD mode;
	GetConsoleMode(hStdin, &mode);
	//移除快速编辑模式
	mode &= ~ENABLE_QUICK_EDIT_MODE;
	//移除插入模式
	mode &= ~ENABLE_INSERT_MODE;
	//移除点击模式
	mode &= ~ENABLE_MOUSE_INPUT;
	mode &= ~ENABLE_EXTENDED_FLAGS;
	SetConsoleMode(hStdin, mode);
	//获取当前控制台输出代码页。资料：https://docs.microsoft.com/zh-cn/windows/console/setconsolecp
	UINT NowCHCP = GetConsoleOutputCP();
	if (NowCHCP != CP_UTF8)
	{
		SetConsoleOutputCP(CP_UTF8);
	}
	NowCHCP = GetConsoleOutputCP();
	// 以下设置字体来支持中文显示。
	CONSOLE_FONT_INFOEX info = { 0 };
	info.cbSize = sizeof(info);
	info.dwFontSize.Y = 16; //字体大小
	info.FontWeight = FW_NORMAL;
	_tcscpy_s(info.FaceName, _TEXT("黑体"));
	SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), NULL, &info);

	string ApprunPath = GetExecRunPath();

	cout << "程序运行目录:" << ApprunPath.c_str() << endl;
	string ImgRunPath = ApprunPath + "/imgData/";
	string ImgSavePath = ApprunPath + "/imgSave/";
	string ImgSaveFile = ApprunPath + "/saveimg.txt";

	cout << "须知：" << endl;
	cout << "   1.imgData文件夹下是各个点击图形的模板数据，勿删！" << endl;
	cout << "   2.yys可以放在后台，但是绝对不能最小化！否则程序自动退出！" << endl;
	cout << "   3.本程序只能单刷御魂！！！ " << endl;
	cout << "   4.如果因为yys更新不好使了，请重新截图。" << endl;
	cout << "     截图流程：" << endl;
	cout << "     4.1.在程序目录创建saveimg.txt文件。" << endl;
	cout << "     4.2.启动程序进入游戏，手动操作客户端完成一局战斗（截图每秒一次，尽量操作慢一点）。" << endl;
	cout << "     4.3.查看imgSave文件夹下面的截图，对比imgData里面的图形模板数据，剪切调整图片大小并替换对应的图形模板。" << endl;
	cout << "     4.4.重启本程序测试，通过后删除saveimg.txt文件。" << endl;
	cout << "   5.PID查看方式：任务栏点右键->任务管理器,在「进程」页面找到yys应用，在他上面点右键->转到详细信息。如果没有PID列，在最上面「名称」标签卡上点右键->选择列。把PID打勾，确定。" << endl;
	cout << "========================================================================" << endl;

	// 是否保存图形数据
	bool saveImg = false;
	if (0 == _access(ImgSaveFile.c_str(), 0))
	{
		saveImg = true;
	}

	if (saveImg && 0 != _access(ImgSavePath.c_str(), 0))
	{
		_mkdir(ImgSavePath.c_str());   // 返回 0 表示创建成功，-1 表示失败
	}

	if (0 != _access(ImgRunPath.c_str(), 0))
	{
		_mkdir(ImgRunPath.c_str());   // 返回 0 表示创建成功，-1 表示失败
	}

	//HWND hwnd = FindWindow(NULL, _TEXT("阴阳师-网易游戏"));

    string yysPID;
CinYYSPID:
    cout << "请输入yys进程PID:";

    cin >> yysPID;
    cin.get();

    if (atoi(yysPID.c_str()) <= 0)
    {
        goto CinYYSPID;
    }

    string RunMode;
SwitchMode:
    cout << "请选择游戏模式（1.单刷御魂  2.队长模式  3.队员模式）:";

    cin >> RunMode;
    cin.get();

    switch (atoi(RunMode.c_str()))
    {
    case 1:
        sSingleYH->SetSaveImgPatch(ImgSavePath);
        sSingleYH->SetLoadImgPatch(ImgRunPath);
        sSingleYH->Run(atoi(yysPID.c_str()));
        break;
    case 2:
        sTeamLeader->SetSaveImgPatch(ImgSavePath);
        sTeamLeader->SetLoadImgPatch(ImgRunPath);
        sTeamLeader->Run(atoi(yysPID.c_str()));
        break;
    case 3:
        break;
    default:
        goto SwitchMode;
        break;
    }

}
